너는 다변량통계, 판별분석, 머신러닝 분류모형, 교통·도로공학 및
Python 데이터 분석을 수행하는 전문 데이터 분석가이다.

첨부한 CSV 또는 Excel 데이터는 500개 도로 구간의 교통·환경·포장 특성과
도로 유형을 포함한 데이터이다.

본 분석의 목적은 다음과 같다.

1. 도로 유형별 설명변수의 특성과 공분산 구조를 분석한다.
2. 선형판별분석(LDA)과 이차판별분석(QDA)의 적용 조건을 검토한다.
3. LDA와 QDA를 각각 구축하고 독립된 시험 데이터에서 성능을 비교한다.
4. 통계적 가정, 예측성능, 모형 복잡도 및 해석 가능성을 종합하여
   최종 판별모형을 선정한다.
5. 최종 선택 모형을 이용해 새로운 도로 구간의 유형을 예측한다.

중요: 분석 방법을 설명하거나 Python 코드만 작성하고 종료하지 마라.

반드시 다음 순서로 수행하여라.

① 전체 Python 코드 작성  
② Python 실행환경에서 실제 실행  
③ 오류 발생 시 원인 수정 후 재실행  
④ 실제 출력된 수치·표·그래프 확인  
⑤ 실제 실행 결과를 근거로 해석  
⑥ 최종 모형 선정  
⑦ 새로운 도로 구간 예측  

가상의 Accuracy, p값, 공분산행렬, 혼동행렬 또는 예측결과를 작성하지 마라.
Python을 실행하지 못한 경우에는 결과를 추정하지 말고 그 이유를 명확히 밝혀라.

────────────────────────────────────
1. 데이터 구조
────────────────────────────────────

데이터의 예상 변수는 다음과 같다.

종속변수:

- Road_Type

Road_Type은 다음 세 가지 유형으로 구성되어 있다.

- Urban_Core: 도심 간선도로
- Suburban_Arterial: 교외 간선도로
- Rural_Road: 농촌 도로

설명변수:

- Traffic_Volume
  · 교통량
  · 단위가 명확하지 않으면 원자료 설명을 확인하고 분석의 한계로 명시

- Speed_kmh
  · 평균 주행속도, km/h

- Noise_dB
  · 교통소음, dB

- IRI_m_per_km
  · 국제평탄성지수 또는 포장 평탄성 지표, m/km
  · 높을수록 노면 평탄성이 좋지 않은 것으로 해석

식별번호, 구간번호, 도로명 등의 변수가 있으면 판별모형 입력에서는 제외하되,
최종 예측결과표에는 다시 결합하여라.

실제 데이터의 변수명이 예상 변수명과 다르면
앞뒤 공백, 대소문자, 특수문자 및 유사 변수명을 확인하여 대응시켜라.

존재하지 않는 변수를 임의로 생성하지 마라.

────────────────────────────────────
2. 문제 1: LDA와 QDA의 이론적 배경
────────────────────────────────────

분석 전에 다음 내용을 설명하여라.

2-1. 선형판별분석 LDA

다음을 설명하여라.

- 각 집단이 다변량 정규분포를 따른다고 가정
- 모든 집단이 동일한 공분산행렬을 가진다고 가정
- 집단 간 판별경계가 선형으로 형성됨
- 하나의 pooled covariance matrix를 사용
- 상대적으로 모수가 적어 표본이 많지 않을 때 안정적
- 공분산행렬 동일성 가정이 충족될 때 효율적

2-2. 이차판별분석 QDA

다음을 설명하여라.

- 각 집단이 다변량 정규분포를 따른다고 가정
- 각 집단별로 서로 다른 공분산행렬을 허용
- 집단별 공분산행렬을 각각 추정
- 판별경계가 곡선 또는 이차형태로 형성될 수 있음
- LDA보다 유연하지만 추정할 모수가 많음
- 표본 수가 부족하면 과적합과 공분산행렬 불안정 가능성이 큼

2-3. 공분산행렬 동일성 가정의 영향

다음을 설명하여라.

- 집단별 공분산행렬이 유사하면 LDA가 단순하고 안정적일 가능성이 큼
- 공분산행렬 차이가 크면 LDA의 선형경계가 실제 구조를 충분히 반영하지 못할 수 있음
- 공분산행렬이 다르면 QDA가 성능을 개선할 가능성이 있음
- 그러나 가정검정 결과만으로 LDA 또는 QDA를 자동 선택해서는 안 됨
- 실제 시험 데이터 성능, 교차검증 결과, 과적합 및 해석 가능성을 함께 고려해야 함

────────────────────────────────────
3. 데이터 불러오기 및 기본 점검
────────────────────────────────────

첨부한 CSV 또는 Excel 파일을 Python으로 직접 불러와라.

다음을 수행하여라.

1. 작업 폴더와 업로드 폴더에서 CSV 및 Excel 파일을 자동 탐색한다.
2. 파일이 여러 개이면 필수 변수 존재 여부를 확인하여 적절한 파일을 선택한다.
3. CSV 파일은 utf-8, utf-8-sig, cp949, euc-kr 인코딩을 순차적으로 확인한다.
4. Excel 파일이면 sheet 목록을 확인하고 적절한 sheet를 선택한다.
5. 변수명 앞뒤 공백을 제거한다.

다음을 출력하여라.

- 사용한 파일명
- 사용한 sheet명
- 전체 행 수와 열 수
- 변수명
- 데이터 앞부분 5행
- 변수별 자료형
- 수치형 변수와 범주형 변수
- 필수 변수 존재 여부

────────────────────────────────────
4. 데이터 품질 점검
────────────────────────────────────

다음을 표로 제시하여라.

- 변수별 결측치 개수
- 변수별 결측치 비율
- 중복 행 개수
- 식별번호 중복 여부
- 무한대 값 개수
- 수치형 변환 실패 개수
- 분석 전 표본 수
- 최종 분석 표본 수

설명변수에 대해 다음 기술통계를 제시하여라.

- 표본 수
- 평균
- 표준편차
- 중앙값
- 최솟값
- 최댓값
- 1사분위수
- 3사분위수
- 왜도
- 첨도

다음 그래프를 작성하여라.

- 변수별 histogram
- 변수별 boxplot
- 설명변수 간 상관계수 heatmap
- Road_Type별 설명변수 boxplot

이상치는 자동으로 제거하지 마라.

입력 오류나 측정 오류라는 명확한 근거가 없는 경우 유지하고,
필요하면 이상치 포함·제외 민감도 분석을 실시하여라.

────────────────────────────────────
5. Road_Type 점검
────────────────────────────────────

Road_Type 값에 다음 처리를 적용하여라.

- 문자열 변환
- 앞뒤 공백 제거
- 대소문자 통일
- 예상 유형과 실제 유형 비교

예상 유형은 다음과 같다.

- Urban_Core
- Suburban_Arterial
- Rural_Road

다음을 제시하여라.

- 실제 유형 수
- 유형별 표본 수
- 유형별 비율
- 결측값
- 잘못 입력된 유형
- 최소 집단 표본 수
- 최대 집단 표본 수
- 집단 불균형비

Road_Type별 표본 수를 표와 막대그래프로 나타내라.

────────────────────────────────────
6. 학습 데이터와 시험 데이터 분리
────────────────────────────────────

전체 데이터를 다음과 같이 분리하여라.

- 학습 데이터: 80%
- 시험 데이터: 20%
- random_state=42
- Road_Type 기준 stratify 적용

동일한 학습·시험 분할을 LDA와 QDA에 공통 적용하여
공정하게 비교하여라.

시험 데이터는 최종 평가 전까지 모형 선택에 사용하지 마라.

다음을 제시하여라.

- 학습 표본 수
- 시험 표본 수
- 학습 데이터의 유형별 표본 수
- 시험 데이터의 유형별 표본 수
- 세 유형이 학습·시험 데이터에 모두 포함되었는지

────────────────────────────────────
7. 전처리
────────────────────────────────────

다음 네 설명변수를 사용하여라.

- Traffic_Volume
- Speed_kmh
- Noise_dB
- IRI_m_per_km

결측치는 Pipeline 내부에서 학습 데이터의 중앙값으로 대체하여라.

수치형 변수는 StandardScaler로 표준화하여라.

판별분석 자체는 변수 단위에 대해 일정한 불변성을 가질 수 있지만,
다음 이유로 표준화를 적용한다고 설명하여라.

- 변수 단위와 범위 차이
- 수치적 안정성
- 공분산행렬 조건 개선
- 판별축과 변수기여도 비교의 편의성

중요:

- imputer와 scaler는 전체 데이터가 아니라 학습 데이터에서만 적합하여라.
- 교차검증 시에는 각 학습 fold 내부에서만 전처리를 적합하여라.
- Pipeline을 이용하여 데이터 누수를 방지하여라.

────────────────────────────────────
8. 문제 2: 집단별 공분산행렬 계산
────────────────────────────────────

각 Road_Type별로 다음 네 변수의 공분산행렬을 계산하여라.

- Traffic_Volume
- Speed_kmh
- Noise_dB
- IRI_m_per_km

다음 두 종류를 모두 검토하여라.

1. 원자료 기준 집단별 공분산행렬
2. 표준화 변수 기준 집단별 공분산행렬

각 도로 유형별 공분산행렬을 표로 출력하여라.

추가로 다음을 계산하여라.

- 공분산행렬 determinant
- 행렬 rank
- condition number
- 각 집단별 고유값
- singular 또는 near-singular 여부

세 공분산행렬의 유사성을 시각적으로 비교하기 위해
도로 유형별 공분산행렬 heatmap을 작성하여라.

다음 질문에 실제 결과를 근거로 답하여라.

1. 집단별 공분산행렬이 육안으로 보아 유사한가?
2. 공분산 구조가 가장 크게 다른 도로 유형은 무엇인가?
3. 어떤 변수 또는 변수쌍에서 집단 간 분산·공분산 차이가 가장 큰가?
4. 특정 집단의 분산이 다른 집단보다 현저히 큰 변수가 있는가?
5. 공분산행렬이 QDA를 적용할 만큼 충분히 안정적으로 추정되는가?

────────────────────────────────────
9. 문제 3: 공분산행렬 동일성 검정
────────────────────────────────────

Box’s M 검정을 Python으로 실제 수행하여라.

귀무가설과 대립가설은 다음과 같다.

- 귀무가설 H0: 모든 Road_Type 집단의 공분산행렬은 동일하다.
- 대립가설 H1: 하나 이상의 Road_Type 집단의 공분산행렬이 다르다.

가능하면 신뢰할 수 있는 Python 패키지를 사용하되,
설치되지 않았거나 실행이 어려우면 Box’s M 검정을 직접 구현하여라.

다음을 제시하여라.

- Box’s M 통계량
- 보정된 근사 검정통계량
- 자유도
- 정확한 p값
- 유의수준 0.05에서의 결론

다음 형식으로 해석하여라.

- p ≥ 0.05:
  공분산행렬 동일성 가정을 기각할 근거가 부족하므로
  LDA 가정에 상대적으로 부합함

- p < 0.05:
  공분산행렬 동일성 가정이 충족되지 않을 가능성이 있으므로
  QDA 검토 필요성이 증가함

단, Box’s M 검정은 다음 특성 때문에 결과를 절대적 기준으로 사용하지 마라.

- 다변량 정규성 위반에 민감함
- 표본 수가 많으면 작은 차이도 유의하게 나올 수 있음
- 집단 크기가 불균형하면 민감할 수 있음

따라서 Box’s M 결과는 실제 공분산행렬, 교차검증 및 시험 성능과 함께 해석하여라.

────────────────────────────────────
10. 다변량 정규성과 다중공선성 점검
────────────────────────────────────

LDA와 QDA의 주요 가정을 점검하여라.

10-1. 정규성

다음을 수행하여라.

- Road_Type별 변수 histogram
- Road_Type별 Q-Q plot
- 변수별 Shapiro–Wilk 검정
- 가능한 경우 다변량 정규성 검정

정규성 검정은 표본 수가 많으면 작은 위반도 유의해질 수 있으므로
그래프와 함께 해석하여라.

10-2. 다중공선성

다음을 계산하여라.

- Pearson 상관계수
- VIF
- 전체 설명변수 행렬의 condition number
- 행렬 rank

심각한 다중공선성이 있다면
LDA와 QDA 공분산 추정에 미치는 영향을 설명하여라.

────────────────────────────────────
11. 문제 4: QDA 모형 구축
────────────────────────────────────

공분산행렬 동일성 여부와 관계없이
LDA와 QDA를 모두 구축하여 실제 성능을 비교하여라.

QDA는 다음 기본모형과 정규화 모형을 검토하여라.

기본 QDA:

QuadraticDiscriminantAnalysis(
    reg_param=0.0,
    store_covariance=True
)

정규화 QDA의 reg_param 후보:

- 0.00
- 0.01
- 0.05
- 0.10
- 0.20
- 0.30
- 0.50
- 0.70
- 0.90

각 reg_param에 대해 학습 데이터 내 교차검증 성능을 계산하여라.

다음을 기록하여라.

- CV Accuracy
- CV Balanced Accuracy
- CV Macro Precision
- CV Macro Recall
- CV Macro F1
- CV Weighted F1
- CV Log Loss
- 경고 발생 여부
- singular covariance 발생 여부
- NaN 또는 무한대 예측확률 여부

최적 QDA reg_param은 시험 데이터가 아니라
학습 데이터의 교차검증 Macro F1을 우선 기준으로 선정하여라.

성능이 유사하면 다음을 함께 고려하여라.

- Accuracy
- Balanced Accuracy
- 수치적 안정성
- 교차검증 표준편차
- reg_param의 크기
- 모형 복잡도

QDA에서 집단별 공분산행렬이
판별함수에 어떻게 반영되는지 설명하여라.

또한 QDA가 LDA보다 과적합에 취약한 이유를 설명하여라.

- 집단별로 별도의 공분산행렬 추정
- 추정해야 할 모수 증가
- 표본 수 부족
- 이상치 민감성
- 공분산행렬 불안정
- 복잡한 이차 판별경계

────────────────────────────────────
12. LDA 모형 구축
────────────────────────────────────

다음 LDA 후보를 비교하여라.

기본 LDA:

LinearDiscriminantAnalysis(
    solver='svd'
)

Shrinkage LDA:

LinearDiscriminantAnalysis(
    solver='lsqr',
    shrinkage='auto'
)

필요하면 다음도 검토하여라.

LinearDiscriminantAnalysis(
    solver='eigen',
    shrinkage='auto'
)

지원되지 않는 solver와 shrinkage 조합은 사용하지 마라.

각 LDA 후보에 대해 다음 교차검증 지표를 계산하여라.

- CV Accuracy
- CV Balanced Accuracy
- CV Macro Precision
- CV Macro Recall
- CV Macro F1
- CV Weighted F1
- CV Log Loss
- 교차검증 표준편차

최적 LDA 역시 시험 데이터가 아닌
학습 데이터의 교차검증 결과만으로 선택하여라.

────────────────────────────────────
13. 교차검증 설계
────────────────────────────────────

모형 선택에는 다음 교차검증을 사용하여라.

- RepeatedStratifiedKFold
- n_splits=5
- n_repeats=5
- random_state=42

최소 클래스 표본 수가 5보다 적으면
n_splits를 자동 조정하고 그 이유를 설명하여라.

모든 LDA와 QDA 후보에 동일한 교차검증 분할을 적용하여라.

다음 평가지표를 사용하여라.

- accuracy
- balanced_accuracy
- precision_macro
- recall_macro
- f1_macro
- f1_weighted
- neg_log_loss

각 값은 평균 ± 표준편차로 제시하여라.

────────────────────────────────────
14. 문제 5: LDA와 QDA 성능 비교
────────────────────────────────────

교차검증으로 선택된 Best LDA와 Best QDA를
전체 학습 데이터에 재학습한 뒤,
독립 시험 데이터에서 한 번만 평가하여라.

각 모형에 대해 다음을 계산하여라.

- Accuracy
- Balanced Accuracy
- Macro Precision
- Macro Recall
- Macro F1-score
- Weighted F1-score
- Log Loss
- 정확히 분류한 표본 수
- 오분류한 표본 수
- 시험 표본 수 N

Accuracy는 다음과 같이 계산하여라.

Accuracy
= 정확히 예측한 도로 구간 수 ÷ 전체 시험 도로 구간 수

Accuracy는 소수와 백분율을 함께 제시하여라.

예시 형식:

Accuracy = 0.9200, 즉 92.00%

위 숫자는 형식 예시일 뿐이며
실제 값은 반드시 Python 실행 결과를 이용하여라.

────────────────────────────────────
15. 교차행렬 및 유형별 성능
────────────────────────────────────

LDA와 QDA 각각에 대해 다음을 작성하여라.

1. 실제 개수 기반 혼동행렬
2. 행 기준 정규화 혼동행렬
3. classification report

혼동행렬의 클래스 순서는 다음과 같이 통일하여라.

- Urban_Core
- Suburban_Arterial
- Rural_Road

각 도로 유형별로 다음을 제시하여라.

- Precision
- Recall
- F1-score
- Support

다음 질문에 실제 결과를 근거로 답하여라.

1. 어느 도로 유형이 가장 잘 분류되는가?
2. 어느 도로 유형에서 QDA의 성능 개선이 가장 두드러지는가?
3. 가장 자주 혼동되는 도로 유형쌍은 무엇인가?
4. LDA와 QDA의 오분류 패턴은 어떻게 다른가?
5. 공분산 구조의 차이가 성능 차이에 어떤 영향을 주었는가?

────────────────────────────────────
16. 문제 6: 분류성능 평가
────────────────────────────────────

LDA와 QDA의 성능을 다음 표로 비교하여라.

| 모형 | CV Accuracy | CV Macro F1 | Test Accuracy | Test Balanced Accuracy | Test Macro F1 | Log Loss |
|------|-------------|-------------|---------------|--------------------------|---------------|----------|

다음 내용을 해석하여라.

- 학습 또는 교차검증 성능과 시험성능 차이
- QDA의 과적합 가능성
- 클래스 불균형 영향
- Accuracy와 Macro F1의 일치 여부
- 예측확률의 안정성
- 모형 복잡도 대비 성능 향상 폭

동일한 시험 도로 구간에서 LDA와 QDA의 정답 여부를 비교하여
McNemar 검정을 수행하여라.

다음을 제시하여라.

- 두 모형 모두 정답인 수
- LDA만 정답인 수
- QDA만 정답인 수
- 두 모형 모두 오답인 수
- McNemar 검정통계량
- p값
- 두 모형의 Accuracy 차이가 통계적으로 유의한지

────────────────────────────────────
17. 판별축 및 결정영역 시각화
────────────────────────────────────

17-1. LDA 판별축

최적 LDA에서 판별축을 추출하여
LD1과 LD2 산점도를 작성하여라.

다음을 포함하여라.

- 도로 유형별 점
- 집단별 중심점
- LD1과 LD2 설명 판별비율
- 범례
- 축 제목

각 판별축에 기여하는 주요 변수를 제시하고 해석하여라.

17-2. 결정경계

설명변수가 4개이므로 전체 결정경계를 직접 2차원에 표현하기 어렵다.

따라서 다음 중 적절한 방법을 사용하여
LDA와 QDA의 경계 차이를 보조적으로 시각화하여라.

- 첫 두 판별축에서의 결정영역
- PCA 2차원 투영 후 보조 결정영역
- 가장 판별력이 높은 두 변수의 부분 결정영역

단, 2차원 시각화는 원래 4차원 모형의 완전한 경계가 아니라
보조적 표현임을 명시하여라.

────────────────────────────────────
18. 변수 영향 분석
────────────────────────────────────

다음 방법을 이용해 변수의 판별 기여도를 분석하여라.

- LDA 판별축 loading
- LDA 계수
- Permutation Importance
- 변수별 단독 또는 제외 모형의 성능 변화

다음 변수의 영향력을 비교하여라.

- Traffic_Volume
- Speed_kmh
- Noise_dB
- IRI_m_per_km

다음을 해석하여라.

1. 어떤 변수가 도로 유형 판별에 가장 크게 기여하는가?
2. Urban_Core 판별에 중요한 변수는 무엇인가?
3. Suburban_Arterial 판별에 중요한 변수는 무엇인가?
4. Rural_Road 판별에 중요한 변수는 무엇인가?
5. QDA가 특정 변수의 분산 차이를 더 잘 활용했는가?

────────────────────────────────────
19. 문제 7: 최종 판별모형 선택
────────────────────────────────────

다음 요소를 모두 고려하여 LDA 또는 QDA 중 하나를 최종 선택하여라.

- Box’s M 검정 결과
- 실제 집단별 공분산행렬 차이
- 다변량 정규성
- 공분산행렬 안정성
- 교차검증 Accuracy
- 교차검증 Macro F1
- 시험 Accuracy
- 시험 Balanced Accuracy
- 시험 Macro F1
- McNemar 검정
- 표본 크기 대비 모형 복잡도
- 과적합 가능성
- 해석 가능성
- 예측확률 안정성

다음 원칙을 적용하여라.

- Box’s M 검정이 유의하다는 이유만으로 QDA를 자동 선택하지 마라.
- Box’s M 검정이 유의하지 않다는 이유만으로 LDA를 자동 선택하지 마라.
- QDA의 성능이 약간 높더라도 교차검증 변동성이 크거나
  시험성능 개선이 미미하면 LDA를 선택할 수 있다.
- LDA와 QDA의 성능이 거의 같으면
  더 단순하고 안정적이며 해석하기 쉬운 LDA를 우선 검토한다.
- QDA가 여러 지표에서 일관되게 우수하고 과적합 징후가 적으면
  QDA를 최종 선택할 수 있다.

최종적으로 다음을 명확하게 제시하여라.

- 최종 선택 모형
- 선택된 하이퍼파라미터
- CV Accuracy
- Test Accuracy
- Test Balanced Accuracy
- Test Macro F1
- 모형 선택 근거
- 선택하지 않은 모형의 한계

────────────────────────────────────
20. 문제 8: 새로운 도로 구간 예측
────────────────────────────────────

다음 새로운 도로 구간을 최종 선택된 판별모형으로 예측하여라.

- Traffic_Volume = 720
- Speed_kmh = 58
- Noise_dB = 74
- IRI_m_per_km = 3.0

새로운 데이터는 학습 데이터에 적합된
동일한 imputer와 StandardScaler를 이용해 변환하여라.

전체 데이터로 scaler를 다시 적합하지 마라.

다음을 제시하여라.

- 최종 예측 Road_Type
- 각 도로 유형별 예측확률
- 가장 높은 예측확률
- 두 번째로 높은 예측확률
- 1순위와 2순위 예측확률 차이
- 예측의 확신도
- 해당 도로 유형으로 분류된 이유

해석은 다음 형식으로 작성하여라.

“새로운 도로 구간은 ○○ 유형으로 예측되었다. 이는 교통량, 평균속도,
소음 및 IRI가 학습 데이터의 ○○ 유형 특성과 상대적으로 유사하기 때문이다.”

단, 실제 Python 실행결과를 확인한 후 유형과 근거를 작성하여라.

예측확률이 낮거나 1·2순위 확률 차이가 작으면
유형 경계에 위치한 도로 구간일 가능성이 있음을 설명하여라.

────────────────────────────────────
21. 문제 9: 종합 서술
────────────────────────────────────

다음 문장을 실제 결과에 맞게 완성하여라.

“본 데이터에서는 공분산행렬의 동일성 가정이
[성립하였다 / 성립하지 않았다 / 명확하지 않았다]고 판단되었으며,
집단별 공분산 구조는 [유사한 특성 / 일부 차이 / 뚜렷한 차이]을 보였다.

LDA와 QDA의 교차검증 및 독립 시험 데이터 성능을 비교한 결과,
[최종 선택 모형]이 Accuracy, Balanced Accuracy, Macro F1,
모형 안정성 및 해석 가능성을 종합적으로 고려할 때
최종 판별모형으로 선택되었다.”

다음 사항도 포함하여 종합적으로 서술하여라.

- Box’s M 검정 결과
- 공분산행렬 차이
- LDA와 QDA 시험성능
- 가장 잘 분류된 도로 유형
- 가장 많이 혼동된 유형
- 주요 판별변수
- 최종 모형 선택 이유
- 새로운 도로 구간 예측결과
- 분석의 한계

────────────────────────────────────
22. 분석의 한계
────────────────────────────────────

실제 분석결과에 맞게 다음 한계를 설명하여라.

- Box’s M 검정의 정규성 민감성
- 공분산행렬 동일성 여부만으로 모형을 선택할 수 없음
- 데이터가 합성자료일 가능성
- 교통량 측정시간 및 단위 불명확 가능성
- 도로유형에 영향을 주는 차로 수, 제한속도, 토지이용 등의 변수 부재
- Road_Type별 표본 불균형 가능성
- 이상치 영향
- 단일 train/test split의 변동성
- 내부 교차검증만 수행한 한계
- 외부 검증 데이터 부재
- 새로운 지역 또는 다른 조사조건에 대한 일반화 한계

────────────────────────────────────
23. 최종 결과표
────────────────────────────────────

시험 데이터 예측결과표에는 다음 항목을 포함하여라.

- 식별변수
- 실제 Road_Type
- LDA 예측 Road_Type
- LDA 정답 여부
- LDA 최대 예측확률
- QDA 예측 Road_Type
- QDA 정답 여부
- QDA 최대 예측확률
- Traffic_Volume
- Speed_kmh
- Noise_dB
- IRI_m_per_km

다음 파일을 생성하여라.

- road_lda_qda_test_predictions.csv
- road_lda_qda_test_predictions.xlsx
- road_lda_qda_model_comparison.csv
- road_lda_qda_model_comparison.xlsx
- road_type_classification_report.csv
- road_type_classification_report.xlsx
- road_covariance_matrices.xlsx
- new_road_prediction.csv
- new_road_prediction.xlsx

────────────────────────────────────
24. 저장할 그래프
────────────────────────────────────

다음 그래프를 PNG 파일로 저장하여라.

1. road_type_distribution.png
2. predictor_histograms.png
3. predictor_boxplots.png
4. road_type_variable_boxplots.png
5. correlation_heatmap.png
6. covariance_heatmaps.png
7. lda_confusion_matrix_counts.png
8. lda_confusion_matrix_normalized.png
9. qda_confusion_matrix_counts.png
10. qda_confusion_matrix_normalized.png
11. model_performance_comparison.png
12. class_f1_comparison.png
13. lda_discriminant_plot.png
14. qda_reg_param_performance.png
15. permutation_importance_lda.png
16. permutation_importance_qda.png
17. decision_boundary_comparison.png
18. new_road_prediction_probability.png

모든 그래프에는 다음을 포함하여라.

- 명확한 제목
- 축 이름
- 단위
- 범례
- 실제 표본 수
- 필요한 평가값
- 가독성 있는 글자 크기

한글 폰트가 없으면 영문 제목을 사용하거나
사용 가능한 폰트를 자동 탐색하여라.

폰트 문제로 분석을 중단하지 마라.

────────────────────────────────────
25. Python 코드 요구사항
────────────────────────────────────

전체 Python 코드는 처음부터 끝까지 한 번에 실행할 수 있도록 작성하여라.

주요 라이브러리는 다음을 사용할 수 있다.

- pandas
- numpy
- matplotlib
- scipy
- scikit-learn
- statsmodels
- openpyxl

Python 코드에는 다음 기능을 모두 포함하여라.

- CSV 및 Excel 파일 자동 탐색
- CSV 인코딩 오류 대응
- Excel sheet 확인
- 변수명 정리
- 필수 변수 존재 여부 검증
- 수치형 변환
- 결측치 및 무한대 처리
- Road_Type 정리
- 기술통계
- 클래스 분포
- 상관분석
- VIF
- 학습·시험 층화분할
- Pipeline
- SimpleImputer
- StandardScaler
- 집단별 공분산행렬
- determinant, rank, condition number
- Box’s M 검정
- LDA 후보모형
- Shrinkage LDA
- QDA reg_param 탐색
- RepeatedStratifiedKFold
- 다중 성능평가지표
- 혼동행렬
- classification report
- McNemar 검정
- LDA 판별축
- Permutation Importance
- 새로운 도로 구간 예측
- CSV 및 Excel 저장
- PNG 그래프 저장
- random_state=42
- 오류 및 경고 처리

코드의 주요 단계마다 한국어 주석을 작성하여라.

────────────────────────────────────
26. 오류 처리
────────────────────────────────────

다음 문제가 발생하면 오류 메시지만 제시하고 종료하지 마라.

- 필수 변수 누락
- CSV 인코딩 오류
- Road_Type 값 불일치
- stratified split 실패
- covariance matrix singular
- variables are collinear
- QDA 공분산행렬 불안정
- NaN 예측확률
- Log Loss 계산 오류
- 일부 클래스가 시험 데이터에 없음
- Box’s M 패키지 부재
- OneHotEncoder 또는 scikit-learn 버전 차이
- 그래프 폰트 오류
- Excel 저장 오류

오류 원인을 확인하고 합리적으로 수정한 뒤 다시 실행하여라.

가능한 조치:

- 변수명 자동 대응
- 수치형 변환
- 교차검증 fold 수 조정
- QDA reg_param 증가
- 예측확률 clipping
- Box’s M 검정 직접 구현
- 폰트 대체
- 파일명 변경
- 필요한 경우 기본 4변수만으로 재실행

수정한 내용과 이유를 반드시 보고하여라.

────────────────────────────────────
27. Python 실제 실행 의무
────────────────────────────────────

Python 코드를 제시한 것만으로 분석을 완료한 것으로 간주하지 마라.

반드시 다음을 수행하여라.

1. 전체 Python 코드를 작성한다.
2. 실제 Python 실행환경에서 실행한다.
3. 오류와 경고를 확인한다.
4. 필요한 경우 코드를 수정한다.
5. 수정된 코드를 다시 실행한다.
6. 최종 결과값을 직접 확인한다.
7. 실제 결과를 근거로 해석한다.
8. 생성된 결과파일의 존재 여부를 확인한다.

실행하지 않은 결과를 실제 결과처럼 작성하지 마라.

최종 판별모형과 새로운 도로 구간의 예측유형은
반드시 실제 Python 실행결과를 기준으로 결정하여라.

────────────────────────────────────
28. 최종 답변 출력 순서
────────────────────────────────────

최종 답변은 다음 순서로 작성하여라.

① 분석 목적  
② 데이터 구조 및 변수 설명  
③ 문제 1: LDA·QDA 이론과 가정 차이  
④ 데이터 품질 및 클래스 분포  
⑤ 학습·시험 데이터 분리 및 전처리  
⑥ 문제 2: 집단별 공분산행렬  
⑦ 문제 3: Box’s M 검정  
⑧ 다변량 정규성과 다중공선성 점검  
⑨ 문제 4: QDA 구축 및 reg_param 선정  
⑩ LDA 구축 및 후보모형 비교  
⑪ 교차검증 결과  
⑫ 문제 5: LDA·QDA 혼동행렬 비교  
⑬ 문제 6: Accuracy·Balanced Accuracy·Macro F1 비교  
⑭ McNemar 검정  
⑮ 도로 유형별 분류성능  
⑯ 판별축과 변수 영향 분석  
⑰ 문제 7: 최종 판별모형 선정  
⑱ 문제 8: 새로운 도로 구간 예측  
⑲ 문제 9: 종합 서술  
⑳ 분석의 한계  
㉑ 전체 Python 코드  
㉒ 실제 Python 실행결과  
㉓ 생성된 표와 그래프  
㉔ 다운로드 가능한 CSV·Excel·PNG 파일  

각 문제에서는 다음을 구분하여 제시하여라.

- 분석 목적
- 적용 방법
- 실제 Python 실행결과
- 결과 해석
- 도로공학적 의미

최종 결과의 모든 수치, 표, 그래프 및 결론은
첨부된 실제 데이터를 Python으로 실행하여 산출한 결과만을 사용하여라.